﻿
/*
* 功能: 为一位数的正整数前面添加0，如果是可以转成非NaN数字的字符串也可以实现
* 参数: 参数表示准备再前面添加0的数字或可以转换成数字的字符串
* 返回值: 如果符合条件，返回添加0后的字条串类型，否则返回自身的字符串
*/
function addZero(num) {
    if (Number(num).toString() != 'NaN' && num >= 0 && num < 10) {
        return '0' + Math.floor(num);
    } else {
        return num.toString();
    }
}

/* 
* 功能：将y进制的数值，转换为x进制的数值
* 参数：第1个参数表示欲转换的数值；第2个参数表示欲转换的进制；第3个参数可选，表示当前的进制数，如不写则为10
* 返回值：返回转换后的字符串
*/
function hexadecimal(num, x, y) {
    if (y != undefined) {
        return parseInt(num.toString(), y).toString(x);
    } else {
        return parseInt(num.toString()).toString(x);
    }
}

/*
* 功能：格式化32位的字符串为GUID模式的字符串
* 参数：第1个参数表示32位的字符串
* 返回值：标准GUID格式的字符串
*/
function formatGUID() {
    var date = new Date();
    var guidStr = "";
    var sexadecimalDate = hexadecimal(date.getFullYear() + addZero(date.getMonth() + 1) + addZero(date.getDay()), 16);
    var sexadecimalTime = hexadecimal(addZero(date.getHours()) + addZero(date.getMinutes()) + addZero(date.getSeconds()) + addZero(parseInt(date.getMilliseconds() / 10)), 16);
    for (var i = 0; i < 9; i++) {
        guidStr += Math.floor(Math.random() * 16).toString(16);
    }
    guidStr += sexadecimalDate;
    guidStr += sexadecimalTime;
    while (guidStr.length < 32) {
        guidStr += Math.floor(Math.random() * 16).toString(16);
    }

    var str1 = guidStr.slice(0, 8) + '-',
            str2 = guidStr.slice(8, 12) + '-',
            str3 = guidStr.slice(12, 16) + '-',
            str4 = guidStr.slice(16, 20) + '-',
            str5 = guidStr.slice(20);

    return str1 + str2 + str3 + str4 + str5;
}
